#ifndef CLIENT_SOCKET_H
#define CLIENT_SOCKET_H
#include <string>
#include <netdb.h>
#include "common_gestor_envios.h"

class Client_socket {
private:
    int fd;
    struct sockaddr_in addr;
    Gestor_envios* gestor;

public:
    /* Constructor, le asigna un fd y una direccion que contiene informacion
     * del puerto e IP del server */
    Client_socket(int port, char* ip);
    /* Constructor por default. */
    Client_socket();
    /* Destructor*/
    ~Client_socket();
    /* Devuelve el fd del socket */
    int get_fd();
    /* Devuelve el address del socket */
    struct sockaddr_in get_addr();
    /* Se conecta al servidor lanzando error de ser necesario */
    int conectar();
    /* Envia un mensaje, controlando que llegue completo */
    int enviar(std::string buffer, int tam);
    /* Recibe un mensaje, controlando que llegue completo */
    int recibir(std::string* buffer, int tam);
    /* Cierra la conexion en ambas direcciones */
    void cerrar_conexion();
    /* Cierra el fd correspondiente a al socket */
    void cerrar();
};


#endif
